/**
 * 一共有N个球，第i个求放在第Ai个盒子中，权值为Wi
 * 可以移动球，代价是球的权值
 * 问每个盒子恰好一个球的最小代价是多少
 * 显然在所有球有多的盒子中，要移动权值小的球
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll =vector<llt>;
using pii = pair<int, int>;
using vpii = vector<pii>;

int const INF = 3;

template<typename T>
istream & operator >> (istream & is, vector<T> & v){
	for(auto & i : v) is >> i;
	return is;
}

template<typename T>
void input(vector<T> &v, int n){
	v.assign(n + 1, {});
	for(int i=1;i<=n;++i) cin >> v[i];
	return;
}

int N;
vector<vll> B;
vpii A;

void work(){
    cin >> N;
	A.assign(N + 1, {});
	for(int i=1;i<=N;++i) cin >> A[i].first;
	for(int i=1;i<=N;++i) cin >> A[i].second;
	B.assign(N + 1, {});
	for(int i=1;i<=N;++i){
		B[A[i].first].push_back(A[i].second);
	}

    llt ans = 0;
	for(auto & v : B){
		if(v.empty()) continue;

		sort(v.begin(), v.end());
		ans += accumulate(v.begin(), v.end() - 1, 0LL);
	}
	cout << ans << endl;
    return;
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
    return 0;
}